package article

import (
	"go-gin-api/app/model"
	"go-gin-api/app/util"
	"strconv"

	"github.com/gin-gonic/gin"
)

// ArticleListService 文章查询接口
type ArticleListService struct {
	// 当前页
	Page string `json:"page"`
	// 当前页码
	PageSize string `json:"page_size"`
	// 分类id
	TypeID string `json:"type_id"`
	// 状态 0 存在 1 删除
	Status string `json:"status"`
}
type articleRes struct {
	Page        int64            `json:"page"`
	PageSize    int64            `json:"pageSize"`
	TotalSize   int64            `json:"totalSize"`
	ArticleList []*model.Article `json:"article_list"`
}

// GeArticle 获取文章
func (s *ArticleListService) GeArticle(c *gin.Context) *util.Response {
	// 查询总数
	var totalSize int64
	if s.Status == "" {
		s.Status = "0"
	}
	// 文章信息
	articleList := make([]*model.Article, 0)
	page, _ := strconv.ParseInt(s.Page, 10, 64)
	pageSize, _ := strconv.ParseInt(s.PageSize, 10, 64)
	// typeID, _ := strconv.ParseInt(s.TypeID, 10, 64)
	// 分页查询
	// 获取全部记录
	if s.TypeID == "" {
		// err := model.DB.Where("status=? ", s.Status).Limit(pageSize).Offset((page - 1) * pageSize).Find(&articleList).Count(&totalSize).Error
		if err := model.DB.Where("status=? ", s.Status).Limit(pageSize).Offset((page - 1) * pageSize).Order("id desc").Find(&articleList).Error; err != nil {
			return &util.Response{
				Code:    4000,
				Message: "failed",
				Data:    "查询文章失败!分类可能不存在,请联系管理员",
			}
		}
		// 查询总数
		if err := model.DB.Model(&model.Article{}).Where("status=? ", s.Status).Count(&totalSize).Error; err != nil {
			return &util.Response{
				Code:    4000,
				Message: "failed",
				Data:    "查询总数失败!",
			}
		}

	}
	// 查询文章分类
	for _, k := range articleList {
		// 文章类型信息
		types := model.ArticleType{}
		err := model.DB.Where("id=?", k.TypeID).Find(&types).Error
		if err != nil {
			return &util.Response{
				Code:    4000,
				Message: "failed",
				Data:    "查询分类失败!",
			}
		}
		k.TypeName = types.TypeName
		user := model.User{}
		errs := model.DB.Where("id=?", k.UserID).Find(&user).Error
		if errs != nil {
			return &util.Response{
				Code:    4000,
				Message: "failed",
				Data:    "查询作者失败!",
			}
		}
		k.UserName = user.NickName
	}

	result := articleRes{
		Page:        page,
		PageSize:    pageSize,
		TotalSize:   totalSize,
		ArticleList: articleList,
	}
	return &util.Response{
		Code:    200,
		Message: "success",
		Data:    result,
	}
}
